package cn.bellychang.leetcode.question203;

/**
 * @author ChangLiang
 * @date 2020/9/10
 */
public class Solution2_1 {

    public ListNode removeElements(ListNode head, int val) {

        /**
         * 指示前一个位置 这里并不写成sentinel = null
         */
        ListNode sentinel = new ListNode(0);
        sentinel.next = head;

        ListNode prev = sentinel;

        /**
         * 指示当前位置
         */
        ListNode curr = head;
        while (curr != null) {
            if (curr.val == val) {
                prev.next = curr.next;
            } else {
                // prev重新进行了赋值 在执行这条语句前，其操作就代表sentinel的操作
                // 只要执行了这条语句 prev就与sentinel分开了 不再指向同一块内存堆对象了
                prev = prev.next;
            }
            curr = curr.next;
        }
        return sentinel.next;
    }
}
